UnityのEditor上で動くpubsub用Server context を作った


概要

あるとゲーム試すの楽になりそうなので組んでみる。

こないだ作ったnginx-lua-moduleでのpubsubのしくみ


nginx-luajit-websocket-pubsuber

https://github.com/sassembla/nginx-luajit-websocket-pubsuber


で、

Client -> (バックエンド) -> redis -> Server contextになるわけだが、


もしも、このServer contextをUnityのEditorで実現できると、

ClientもServer contextも、一つのUnity上で動かせる感じになる。これはラクじゃね?


つまりゲームコードとサーバコードを一カ所、Unity上で編集できる。

あくまで実験だが。



Editor側に来てほしいもの

ClientはUnityのPlayer側に任せるとして、


nginx-luajit-websocket-pubsubberがredisをqueueに使っているので、

Editor側で請負いたいのは、redisのpubsubを捌く機構。


upstreamはこんなの。

Client -> (中略) -> redis-pub -> redis -> redis-sub -> Server context

downstreamはこんなの。

Client <- (中略) <- redis-sub <- redis <- redis-pub <- Server context


なので、Unity EditorのコードでゲームのServer側コンテキスト書いて、

あとはpubとsubが出来れば、バックエンド機構の立ち上げは別途必要として、下記のような構造が作れそう。


スクリーンショット 2015-03-25 4.09.20.png


、、うん、わかんねえな?

要は、一台でもUnity EditorでServer contextが動いていれば、nginxをWebServerとしてClient1~3とやり取りできるようになる。

Client1とUnity Editor Server context は一つのUnity Application上で動かせる。


nginx-luaでWebSocketServeしたりしてると、各ClientがLAN内で一台のUnity EditorのServer context と接続されて、ゲーム試したりとか出来る。

しかもServer context はUnity上で動いているコードなので、適当に編集可能。

Clientとやり取りするデータの型とかの共有も可能。


まあ編集するたびに更新されるんだが。リセット命令は必要だと思うけど今回はめんd


出来上がった物がこちら


UEaaS

https://github.com/sassembla/UEaaS


ひどい名前なので気に入った。

そのうち正気に戻って付け直すと思う。



機能とか特性とかは下記。


・redisでpubsubしたデータをUnityEditor内でsubscribeしたりpublishしたりする

・EditorコードなのでUnity起動したらそのまま動いてる

・redisの先にClientが居れば、データが届く

・payload部分はjson、それ以外のroutingとかpublish先の限定はbyteで書き込まれ、Clientに到達するのはデータのみ

・Clientのログを集計できるような命令乗っけといた


Unity上で編集の必要がある全部のコードが弄れるようになった。とりあえず足がかりとしては満足だ。

ざっくりClient-Server間はstringでやり取りするように書いたけど、だいたいbyteで操作してるのでmsgpackへの変更も可能。



そしてこれで、Server contextをluaで書かなくてよくなる。